package com.zhanbo.algorithm;

/**
 * @author zhanbo
 * @version 1.0
 * @describe
 * @date 2020/7/31-11:36
 */
public class Solution16 {

    public static void main(String[] args) {

        Power(2.3,5);
    }


    /**
     * 给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent，求 base 的 exponent 次方。
     *
     *
     * 因为 (x*x)n/2 可以通过递归求解，并且每次递归 n 都减小一半，因此整个算法的时间复杂度为 O(logN)。
     * @param base
     * @param exponent
     * @return
     */
    public static double Power(double base, int exponent) {
        if (exponent == 0) {
            return 1;
        }
        if (exponent == 1) {
            return base;
        }
        boolean isNegative = false;
        if (exponent < 0) {
            exponent = -exponent;
            isNegative = true;
        }
        double pow = Power(base * base, exponent / 2);
        if (exponent % 2 != 0) {
            pow = pow * base;
        }
        return isNegative ? 1 / pow : pow;
    }



}
